import copy


# 深拷贝可变类型: 若为可变类型开辟新的内存空间,所有层都会深拷贝
# 作用: 能保证数据的安全
def dm01_深拷贝可变类型():
    a = [1, 2, 3]
    b = [11, 22, 33]
    c = [6, 7, a, b]

    d = copy.deepcopy(c)
    print('id(c)-->', id(c))
    print('id(d)-->', id(d))
    print('id(c), id(d)不一样说明, 说明d是新开辟的内存空间,也就是第一层数据是新拷贝的')

    a[1] = 100
    b[1] = 800
    print(c, d)
    print('可以看出c/d的第二层数据是不一样的,说明是深拷贝了第2层')


# 深拷贝不可变类型: 若为不可变类型直接就引用了, 不开辟新的内存空间
def dm02_深拷贝不可变类型():
    a = (1, 2, 3)
    b = (11, 22, 33)
    c = (6, 7, a, b)

    d = copy.deepcopy(c)
    print(id(c))
    print(id(d))
    print("c/d内存空间相同, 说明c和d指向相同的内存空间")
    # 不可变类型本身值都是不能被修改的,没有再浪费内存空,
    # 所以程序员要深拷贝不可变类型,
    # python解释器直接返回值地址(别名/引用)



# 深拷贝和浅copy做函数参数


def myfun(myc):
    pass

if __name__ == '__main__':
    # dm01_深拷贝可变类型()
    # dm02_深拷贝不可变类型()

    a = [1, 2, 3]
    b = [11, 22, 33]
    c = [6, 7, a, b]
    myfun(c)
    myfun(copy.deepcopy(c))





